//
//  Emoticons.swift
//  WeiBo_NB
//
//  Created by apple on 15/3/13.
//  Copyright (c) 2015年 Ai. All rights reserved.
//

import Foundation

// 表情符号分组
class EmoticonsSection {
    // 分组
    var name: String
    /// 类型
    var type: String
    /// 路径
    var path: String

    /// 表情符号的数组(每一个 section中应该包含21个表情符号，界面处理是最方便的)
    var emoticons: [Emoticon]
    // 构造函数
    init (dict:NSDictionary){
        name = dict["emoticon_group_name"] as! String
        type = dict["emoticon_group_type"] as! String
        path = dict["emoticon_group_path"] as! String
        emoticons = [Emoticon]()    }


// 加载表情数据
 class func loadEmoticons() -> [EmoticonsSection]{
    
    let path = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent("Emoticons/emoticons.plist")
    let array = NSArray(contentsOfFile: path)
    // 内容为EmoticonsSection的数组
    var result = [EmoticonsSection]()

    // dict是每个字典的内容
    for dict in array as! [NSDictionary]{
            result += loadEmoticons(dict)
    }
    return result
    }

    // 根据dict加载每个种类的表情
    private class func loadEmoticons (dict:NSDictionary) -> [EmoticonsSection]{
        // 拼接路径
        let tempPath = dict["emoticon_group_path"] as! String
        let path = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent("Emoticons/\(tempPath)/info.plist")
        
        var dictInfo = NSDictionary(contentsOfFile: path)!
        
        // 每个字典表情中的emoticon_group_emoticons属性对应的数组
        var list = dictInfo["emoticon_group_emoticons"] as! NSArray
        
        var result = loadEmotions(list, dict:dict)
        return result
    }

    
    /// 从 emoticon_group_emoticons 返回表情数组的数组，每一个数组 都 包含 21 个表情(最后一个是空的)
    private class func loadEmotions(list:NSArray, dict:NSDictionary) -> [EmoticonsSection] {
        
        // 生成数组，每20个就建立一个 EmoticonsSection 对象
        let emoticonCount = 20
        // 计算总共需要建立多少个对象,list表示所有表情中的数组中img得个数(分别是6,4,2,1)
        let objcount = (list.count - 1) / emoticonCount + 1
        var result = [EmoticonsSection]()

        for i in 0..<objcount {
            // 创建对象
                var emoticon = EmoticonsSection(dict: dict)
                for count in 0..<emoticonCount{
                    // 计算数组下标(0-19 / 20-39 / 40-59 ...)
                    let j = count + i * emoticonCount
                    var Dict : NSDictionary?  = nil
                    
                    if j < list.count{
                        // 数组有内容，实例化表情对象
                        Dict = list[j] as? NSDictionary
                    }
                    
                    // emoticon创建时，就已经有了路径
                    let em = Emoticon(dict: Dict, path: emoticon.path)
                    emoticon.emoticons.append(em)
            }
            // 给末尾添加删除按钮
              emoticon.emoticons.append(Emoticon(dict: nil, path: nil))
            result.append(emoticon)
        }
        
        
        return result

    }






}



// 表情符号类
class Emoticon {
    /// emoji 的16进制字符串
    var code: String?
    /// emoji 字符串
    var emoji: String?
    
    /// 类型
    var type: String?
    /// 表情符号的文本 - 发送给服务器的文本
    var chs: String?
    /// 表情符号的图片 - 本地做图文混排使用的图片
    var png: String?
    /// 图像的完整路径
    var imagePath: String?
    /// 是否是删除按钮
    var isDeleteButton = false
    
    init (dict : NSDictionary?, path : String?){
        code = dict?["code"] as? String
        type = dict?["type"] as? String
        chs = dict?["chs"] as? String
        png = dict?["png"] as? String
        
        if png != nil && path != nil{
            imagePath = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent("Emoticons/\(path!)/\(png!)")
        }
        
        // emoji
        if code != nil {
            let scanner = NSScanner(string: code!)
            // 提示：如果要传递指针，不能使用 let，var 才能修改数值
            var value: UInt32 = 0
            scanner.scanHexInt(&value)
            emoji = "\(Character(UnicodeScalar(value)))"
        }
        
    }
}